# 迭代是一种加载值方式
# 可迭代对象（str, list, tuple, dict, set, 文件句柄）
# 标志__iter__()方法,并且有许多其他方法
# 取值方式str list tuple 索引，dict 键，set 直接取值
"""
s = '123321'
s1 = s.__iter__()
lst = [1, 2, 3, 4]
lst.__iter__()
"""
# 可迭代对象在输出时都是将数据全部加载到内存中在进行打印，比较占用空间

# 迭代器（文件句柄）
# 标志 __iter__() __next__()
"""
f = open('xxx', 'a')
f1 = f.__iter__()
# f.__next__()
print(type(f1))
"""


# 将其他可迭代对象改为迭代器
"""
s = '123321'
s1 = s.__iter__()   # s.__iter__()此时为 iterator 迭代器
s1.__next__()
s2 = s1.__next__()
print(s1)
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())
"""


# 遍历迭代器，就是for本质
"""
while True:
    try:
        print(s1.__next__())
    except StopIteration:
        break
"""

# 总结：
#     可迭代对象优点：
#         1、用法灵活
#         2、可以直接查看数据本身
#     缺点：
#         占内存，不能可以迭代产看数据
#     迭代器优点：
#         1、节省内存、惰性机制
#     缺点：
#         不灵活，只有一个方向，不能直接产看数据本身，步骤繁琐

# 使用场景：当容器中数量较大时，用迭代器